#!/bin/bash
cd "$( dirname "${BASH_SOURCE[0]}" )"

w=1280
h=960

x=0
y=0

browser_start="chromium-browser --no-sandbox --window-size=${w}x${h}"
browser_kill='chromium'
#browser_start="firefox -width=$w -height=$h"
#browser_kill='firefox'

#png_match='opencv_match.py'
png_match='skimage_match.py'
export DISPLAY=:1
unset DEBUG_LEVEL
export DEBUG_LEVEL=1

rm -rf ./autorecord
mkdir -p autorecord

#屏幕截图，用计算机视觉库识别模板图片并给出位置
matchpng(){
	read x y <<< $(python3 $png_match ./matchTemplate/$1.png $2)
}

cleanup_and_exit(){
	pkill $browser_kill
	unset DISPLAY
	unset DEBUG_LEVEL
	exit 1
}

#玛薇卡单通深火的构筑I
deepfire(){
	#关闭地脉异常弹窗
	xdotool key h
	sleep 3
	#普攻位移
	xdotool key h
	sleep 3
	xdotool key h
	sleep 3
	#和秘境钥匙交互
	xdotool key f
	sleep 1
	#点按元素战技，网络延迟可能导致长按，将在后面重试
	xdotool key e
	sleep 10
	#靠近秘境古树
	for((ii=0;ii<7;ii++));do
		xdotool key shift
		sleep 3
	done
	#和古树交互
	xdotool key f
	sleep 3
	#选择使用原粹树脂(跳过动画)
	xdotool key 6
	sleep 10
	#如果没有领到摩拉判断本次挑战失败
	matchpng mora 0.7
	if [[ $x -eq 0 || $y -eq 0 ]];then
		sleep 10
		matchpng mora 0.7
	fi
}

#用历练点领取每日奖励
dailybonus(){
	#打开冒险之证
	xdotool key i
	sleep 5
	#点击委托
	xdotool key j
	sleep 3
	#领取委托奖励
	xdotool key k
	sleep 3
	#关闭领取界面
	xdotool key l
	sleep 3
	#点击领取奖励
	xdotool key l
	sleep 5
	#确认传送
	xdotool key o
	sleep 15
	#靠近冒险家协会
	for((ii=0;ii<4;ii++));do
		xdotool key shift
		sleep 3
	done
	xdotool key d
	sleep 3
	xdotool key shift
	sleep 3
	#和凯瑟琳对话
	xdotool key f
	sleep 3
	#向着星辰和深渊，欢迎来到冒险家协会
	xdotool key f
	sleep 3
	#领取每日委托奖励
	xdotool key x
	sleep 5
	#感谢你完成了今天的委托，这是给你的奖励
	python3 ocr.py >> dailybonus.log
	xdotool key f
	sleep 3
	#关闭奖励界面
	xdotool key f
	sleep 3
}

#到达荒废砌造坞
atfire(){
	#打开冒险之证
	xdotool key i
	sleep 5
	#点击秘境
	xdotool key p
	sleep 3
	#地图定位
	xdotool key u
	sleep 3
	#确认传送
	xdotool key o
	sleep 15
	#靠近荒废砌造坞
	xdotool key shift
	sleep 3
	#和荒废砌造坞交互
	xdotool key f
	sleep 5
	#选择祝圣秘境:深火的构筑I
	xdotool key m
	sleep 3
	#选择单人挑战
	xdotool key o
	sleep 5
	#选择开始挑战
	xdotool key o
	sleep 30
	#关闭地脉异常弹窗
	xdotool key shift
	sleep 3
	#靠近秘境钥匙
	xdotool key shift
	sleep 3
	matchpng cube 0.7
	if [[ $x -eq 0 && $y -eq 0 ]];then
		cleanup_and_exit
	fi
}

#分解圣遗物
dartifacts(){
	#打开背包
	xdotool key b
	sleep 3
	#选择圣遗物界面
	xdotool key j
	sleep 3
	#选择分解
	xdotool key 4
	sleep 3
	#快速选择
	xdotool key 5
	sleep 3
	#确认选择
	xdotool key 5
	sleep 3
	#分解
	xdotool key o
	sleep 3
	#确认分解
	xdotool key r
	sleep 3
	#关闭分解界面
	xdotool key r
	sleep 3
	#退出圣遗物分解
	xdotool key g
	sleep 3
	#退出背包
	xdotool key g
	sleep 3
}

main(){
	#屏幕解锁
	xdotool click 1

	#浏览器打开网易云游戏，运行手游原神
	$browser_start https://cg.163.com/static/game/yssy >/dev/null 2>&1 &
	sleep 20

	for ((i=0;i<5;i++)); do
		if [[ $i -ge 2 ]];then
			matchpng age 0.7
			if [[ $x -ne 0 && $y -ne 0 ]];then
				i=0
				matchpng green 0.9
				if [[ $x -ne 0 && $y -ne 0 ]];then
					xdotool mousemove --sync $x $y click 1
					sleep 3
					xdotool mousemove --sync 1 1
					sleep 3
				fi
				break
			fi
		fi
		sleep 10
		matchpng green 0.9
		if [[ $x -ne 0 && $y -ne 0 ]];then
			xdotool mousemove --sync $x $y click 1
			sleep 3
		fi
	done

	if [[ $i -ge 4 ]];then
		cleanup_and_exit
	fi

	#原神点击开门，版本更新可能导致加载时间较长，允许重试3次
	for ((i=0;i<3;i++)); do
		xdotool click 1
		sleep 60
		matchpng paimon_option 0.7
		if [[ $x -ne 0 && $y -ne 0 ]];then
			break
		elif [ $i -ge 2 ];then
			cleanup_and_exit
		fi

	done
	
	#分解圣遗物
	dartifacts

	#如果玛薇卡在队伍中，把她切到前台
	matchpng mavuika 0.7
	if [[ $x -ne 0 && $y -ne 0 ]];then
		xdotool mousemove --sync $x $y click 1
	fi

	#挑战6次秘境消耗120点原粹树脂，用历练点领取每日奖励	
	atfire
	f=0
	for ((i=0;i<6;i++)); do
		deepfire
		if [[ $x -ne 0 && $y -ne 0 ]];then
			if [ $i -eq 5 ];then
				#退出秘境
				xdotool key v
			else
				#再次挑战
				xdotool key q
			fi
			sleep 20
		elif [ $f -ge 5 ];then
			cleanup_and_exit
		else
			let f++
			atfire
			let i--
		fi
	done
	dailybonus

	#退出云游戏
	xdotool key Escape
	sleep 10
	matchpng exitgame 0.7
	if [[ $x -ne 0 && $y -ne 0 ]];then
		xdotool mousemove --sync $x $y click 1
		sleep 10
	fi

	matchpng green 0.9
	if [[ $x -ne 0 && $y -ne 0 ]];then
		xdotool mousemove --sync $x $y click 1
		sleep 5
	fi

	#关闭浏览器
	pkill $browser_kill
	return 0
}

main
unset DEBUG_LEVEL
unset DISPLAY
